import axios from 'axios'; // 引入axios
import qs from 'qs'; // 序列化字符串

// 环境切换
axios.defaults.baseURL = 'http://xinghai.b2b.com/';
// 请求超时时间
axios.defaults.timeout = 10000;

// post请求头
// axios.defaults.headers.post['Content-Type'] =
//   'application/x-www-form-urlencoded;charset=UTF-8';

// request 请求拦截器
axios.interceptors.request.use(
  (config) => {
    let token;
    const info = localStorage.cylinfo;
    if (info) {
      token = JSON.parse(localStorage.cylinfo).token;
    }
    token && (config.headers['X-Client-ApiToken'] = token);
    return config;
  },
  (error) => {
    return Promise.reject(error);
  }
);

// response 响应拦截器
axios.interceptors.response.use(
  (response) => {
    if (response.status === 200) {
      return Promise.resolve(response);
    } else {
      return Promise.reject(response);
    }
  },
  // 服务状态码不是200的情况
  (error) => {
    if (error.response.status) {
      switch (error.response.status) {
        // 401 未登录
        // 未登录则跳转登录页面，并携带当前页面的路径
        // 在登录成功后返回当前页面，这一步需要在登录页操作。
        case 401:
          console.log('去登陆');
          break;
        // 403 token过期
        // 登录过期对用户进行提示
        // 清除本地token和清空vuex中token对象
        // 跳转登录页面
        case 403:
          console.log('登录过期');
          localStorage.removeItem('token');
          // 跳转登录页面，并将要浏览的页面fullpath传过去，登录成功后跳转到要访问的
          break;
        // 404 请求不存在
        case 404:
          console.log('网络请求不存在');
          break;
        // 其他错误直接抛出错误提示
        default:
          console.log(error.response.data.message);
      }
      return Promise.reject(error.response);
    }
  }
);

export const get = (url: string, params: any) => {
  return new Promise((resolve, reject) => {
    axios
      .get(url, {
        params: params,
      })
      .then((res) => {
        resolve(res.data);
      })
      .catch((err) => {
        reject(err.data);
      });
  });
};

export const post = (url: string, params: any) => {
  return new Promise((resolve, reject) => {
    axios
      .post(url, qs.stringify(params))
      .then((res) => {
        // console.log(res.data);
        resolve(res.data);
      })
      .catch((err) => {
        reject(err.data);
      });
  });
};
